Ext.namespace("Hroze");
Hroze.Table = function() {
	return {
		/**
		 * @description 获得表格中获得指定列的数组
		 * @param {HTMLElement/string}id
		 *            表格的id
		 * @param {int}colIndex
		 *            列的索引(从0开始)
		 * @param {int}start
		 *            从第一行开始读取 默认是第0行，一般从第一行开始读取
		 */
		getValue : function(id, colIndex, start) {
			if (!start) {
				start = 0;
			}
			var value = [];
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			for (var i = start; i < tb.rows.length; i++) {
				value.push(tb.rows[i].cells[colIndex].innerHTML);
			}
			return value;
		},
		/**
		 * @param {string}id
		 *            表格id
		 * @param {int}rowIndex
		 *            需要上移的行的索引
		 * @param {int}start
		 *            起始索引的位置（一般第一行不需要移动，默认为1）
		 * @description 指定行上移
		 */
		up : function(id, rowIndex, start) {
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}

			var tbody = tb.tBodies[0];
			if (typeof start != 'number') {
				start = 1;
			}
			if (rowIndex > start) {
				var uprow = tb.rows[rowIndex];
				var downrow = tb.rows[rowIndex - 1];
				var upRow = this.getModel(id, rowIndex);
				var downRow = this.getModel(id, rowIndex - 1);
				tbody.replaceChild(downRow, uprow);
				tbody.replaceChild(upRow, downrow);
				return true;
			} else {
				return false;
			}
		},
		/**
		 * @param {HTMLElement/String}select 下拉列表
		 * @param {Number}rowIndex 要移动的行的索引
		 * @param {Number}start 可以移动的索引
		 * @description 下拉列表选中位置下移
		 */
		down : function(id, rowIndex, start) {
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			var tbody = tb.tBodies[0];
			if (typeof start != 'number') {
				start = 1;
			}
			if (rowIndex < tb.rows.length - 1 && rowIndex >= start) {
				var uprow = tb.rows[rowIndex + 1];
				var downrow = tb.rows[rowIndex];
				var upRow = this.getModel(id, rowIndex + 1);
				var downRow = this.getModel(id, rowIndex);
				var pNode = uprow.parentNode;
				pNode.replaceChild(upRow, downrow);
				pNode.replaceChild(downRow, uprow);
				return true;
			} else {
				return false;
			}

		},
		/**
		 * @description 获得模版行副本(默认是第二行)，获得制定索引行的副本
		 * @param {string}id 表格id
		 * @param {Number}index 索引 默认1
		 */
		getModel : function(id, index) {
			var rowIndex = 1;
			if (typeof index == 'number') {
				rowIndex = index;
			}
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			var row = tb.rows[rowIndex];
			return row.cloneNode(true);
		},
		/**
		 * @description 表格插入多行
		 * @param {HTMLElement/String} id 表格Id或者表格dom
		 * @param {HTMLElement}model 用于复制的行元素
		 * @param {Number}rows 插入行数（可选默认值1）
		 */
		appendRow : function(id, model, rows) {
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			var row = 1;
			if (typeof rows == 'number') {
				row = rows;
			}
			if (tb) {
				var tbody = tb.tBodies[0];
				for (var i = 0; i < row; i++) {
					var r = model.cloneNode(true);
					tbody.appendChild(r);
				}
			}
		},
		/**
		 * @param {HTMLElement/String}id 表格id或者表格dom
		 * @param {array}data 数组
		 * @param {Object}cfg 配置
		 * @param {HTMLElement} 模型
		 */
		addRow : function(id, data, cfg, model) {
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			if (tb) {
				if (data.length > 0) {
					var tbody = tb.tBodies[0];
					for (var i = 0; i < data.length; i++) {
						var r = model.cloneNode(true);
						// 插入数据
						var cells;
						if (Ext.isIE) {
							cells = r.childNodes;
						} else {
							cells = r.cells;
						}
						for (var p in cfg) {
							var index = cfg[p];
							if (Ext.isNumber(index)) {
								cells[index].innerHTML = data[i][p]
							} else {
								var inputs = Ext.query("[name=" + index + "]",
										r);
								if (Ext.isArray(inputs)) {
									Ext.each(inputs, function(item, index) {
												if (item.tagName == 'INPUT'
														|| item.tagName == "SELECT") {
													item.value = data[i][p];
												} else if (item.tagName == "A") {
													item.href = data[i]['a_href'];
													item.title = data[i]['a_title'];
													item.innerHTML = data[i]['a_text'];
												} else if (item.tagName == "IMG") {
													item.title = "img_title";
													item.src = "img_src";
												}
											});
								} else if (Ext.isElement(inputs)) {
									if (inputs.tagName == 'INPUT'
											|| inputs.tagName == "SELECT") {
										inputs.value = data[i][p];
									} else if (inputs.tagName == "A") {
										inputs.href = data[i]['a_href'];
										inputs.title = data[i]['a_title'];
										inputs.innerHTML = data[i]['a_text'];
										inputs.id = data[i]['a_id'];
									} else if (inputs.tagName == "IMG") {
										inputs.title = "img_title";
										inputs.src = "img_src";
									}
								}
							}
						}
						tbody.appendChild(r);
					}

				}
			}

		},
		/**
		 * @description 渲染数据
		 * @param {HTMLElement/string} 表格id
		 * @param {array} data 数据
		 * @param {object}cfg {name：index}
		 * @param {Element} model 行模版
		 */
		renderTable : function(id, data, cfg, model) {
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			this.clearTable(id, 1);
			if (tb) {
				if (data.length > 0) {
					// 必须有一行空数据
					var tbody = tb.tBodies[0];
					for (var i = 0; i < data.length; i++) {
						var r = model.cloneNode(true);
						// 插入数据
						var cells;
						if (Ext.isIE) {
							cells = r.childNodes;
						} else {
							cells = r.cells;
						}
						for (var p in cfg) {
							var index = cfg[p];
							cells[index].innerHTML = data[i][p]
						}
						tbody.appendChild(r);
					}

				}
			}
		},
		/**
		 * @description 清空表格内容（保留表头）
		 * @param {HTMLElement/String} id 表格id或者dom
		 * @param {Number}rows 保留行数，默认为2
		 */
		clearTable : function(id, rows) {
			var row = 1;
			if (typeof rows == 'number') {
				row = rows;
			}
			var tb = id;
			if (Ext.isString(id)) {
				tb = Ext.getDom(id);
			}
			if (tb) {
				var length = tb.rows.length;
				for (var i = length - 1; i >= rows; i--) {
					tb.deleteRow(i);
				}
			}
		},
		/**
		 * @description 删除所有行（保留首航）
		 * @param {HTMLElement/String} id 表格id或者表格dom
		 */
		removeAll : function(id) {
			Hroze.Table.clearTable(id, 0);
		},
		/**
		 * 获得列标题
		 */
		getTh : function(node, root) {
			var td = Ext.fly(node).parent("td", true);
			var title = "";
			if ((root && Ext.fly(root).contains(td)) || !root) {

				var index = td.cellIndex;
				var tb = Ext.fly(node).parent("table", true);
				var thead = tb.tHead

				if (Ext.isIE) {
					title = tb.rows[0].childNodes[index].innerHTML;
				} else {
					title = tb.rows[0].cells[index].innerHTML;
				}

			}
			return title;
		}
	}
}()
